//package com.example.demo.service;
//
//import com.example.demo.game.SnakeState;
//
//import java.awt.*;
//import java.util.*;
//
//public class SnakeGameService {
//    private final int gridW = 50;
//    private final int gridH = 50;
//
//    private LinkedList<Point> snake = new LinkedList<>();
//    private char direction = 'R';
//    private Point food;
//    private boolean gameOver = false;
//
//    public SnakeGameService() {
//        initGame();
//    }
//
//    public void changeDirection(char dir) {
//        if (isValidDirection(dir)) {
//            direction = dir;
//            move();
//        }
//    }
//
//    public SnakeState getState() {
//        return new SnakeState(snake, food, gameOver);
//    }
//
//    private boolean isValidDirection(char dir) {
//        switch (dir) {
//            case 'U':
//                return direction != 'D';
//            case 'D':
//                return direction != 'U';
//            case 'L':
//                return direction != 'R';
//            case 'R':
//                return direction != 'L';
//            default:
//                return false;
//        }
//    }
//
//    private void initGame() {
//        snake.clear();
//        for (int i = 2; i >= 0; i--) {
//            snake.add(new Point(i, 0));
//        }
//        direction = 'R';
//        gameOver = false;
//        generateFood();
//    }
//
//    private void generateFood() {
//        Random rand = new Random();
//        do {
//            food = new Point(rand.nextInt(gridW), rand.nextInt(gridH));
//        } while (snake.contains(food));
//    }
//
//    private boolean checkCollision(Point head) {
//        if (head.x < 0 || head.x >= gridW || head.y < 0 || head.y >= gridH || snake.contains(head)) {
//            return true;
//        }
//        return false;
//    }
//
//    private void move() {
//        Point head = snake.getFirst();
//        Point newHead = (Point) head.clone();
//
//        switch (direction) {
//            case 'U':
//                newHead.y--;
//                break;
//            case 'D':
//                newHead.y++;
//                break;
//            case 'L':
//                newHead.x--;
//                break;
//            case 'R':
//                newHead.x++;
//                break;
//        }
//
//        if (checkCollision(newHead)) {
//            gameOver = true;
//        } else {
//            snake.addFirst(newHead);
//            if (newHead.equals(food)) {
//                generateFood();
//            } else {
//                snake.removeLast();
//            }
//        }
//    }
//
//    public void reset() {
//        initGame();
//    }
//}